程序的时间复杂度计算

很多时候一眼就能看出程序的时间复杂度,但是遇到复杂的就需要将其过程推导出来,为此总结以下两种形式

一、循环主体中的变量参与循环条件的判断

找出主体语句中与T(n)成 正比的循环变量,带入进行计算,例如:

int i = 1;

while(i <= n)

    i = i*2;

其中i*2的次数与T(n)成正比,则2的T(n)次方<= n,则T(n)<=log2n。

二、循环主体中的变量与循环条件无关

可采用数学归纳法或者直接累计循环次数,多层循环时从内到外分析,只关注主体语句执行次数。这种情况分为递归程序和非递归程序

递归程序一般使用公式进行递推,例如:

int fact (int n){

    if(n<=1) return 1;

    return n*fact(n-1);

}

T(n)=1+T(n-1)=1+1+T(n-2)= ...=n-1+T(1)

则T(N)=O(n).

非递归程序比较简单,可以直接累计次数

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leonban

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值